<?php
namespace addons\csminvite\library;

/**
 * Notify类型
 * test:
 * http://127.0.0.1/fastadmin_plugin_csmmeet/public/index/user/register.html?csminvite=qd_A001_0&csminvitesign=1fd49c07bffb03089c731391d03c6685
 */
class CsminviteInvcode extends CsminviteNotifyType
{

    /**
     * 获取通知类型邀请函（到user维度Row），并校验链接是否可注册
     */
    public function getAndCheckByInvkey($invkey, $invid)
    {
        if (CsmUtils::isNullOrBlank($invkey)) {
            $this->_error("参数错误：csminvite#2");
        }
        if (CsmUtils::isNullOrBlank($invid)) {
            $this->_error("参数错误：csminvite#3");
        }
        $dao = new \app\admin\model\csminvite\Invcodeuser();
        $row = $dao->alias("t")
        ->join("csminvite_invcode a1", "t.csminvite_invcode_id=a1.id and a1.status='normal'")
        ->where("t.status", "=", "normal")
        ->where("t.invkey", "=", strtolower($invkey))
        ->field("a1.id id,a1.effectbegintime,a1.effectendtime,t.id subid,t.codestatus")
        ->find();
        if (! $row) {
            $this->_error("邀请码不正确，无法注册。");
        }
        // 判断是否在有效期内
        $now = time();
        if ($now < $row->effectbegintime) {
            $this->error("邀请链接从" . date('Y-m-s h:i', $row->effectbegintime) . "开始，目前无法注册!");
        }
        if ($now > $row->effectendtime) {
            $this->error("邀请链接在" . date('Y-m-s h:i', $row->effectendtime) . "已经过期，无法注册!");
        }
        // 是否已经注册
        if ($row->codestatus == 'used') {
            $this->error("邀请链码已经使用，无法注册!");
        }
        return $row;
    }

    /**
     * Notify类型：记录邀请链接访问时间
     */
    public function visitRegisterUrl($row)
    {
        //访问页面无参数，无法判断
        return;
    }

    /**
     * 注册成功后调用，回写notifyuser
     */
    public function afterRegistered($dbuser, $invkey, $invid)
    {
        $dao = new \app\admin\model\csminvite\Invcodeuser();
        $row = $dao->alias("a1")
        ->where("a1.status", "=", "normal")
        ->where("a1.invkey", "=", strtolower($invkey))
        ->field("a1.*")
        ->find();
        if ($row == null) {
            // 理论上不会出现这个问题，之前在校验过
            return;
        }
 
        $dao = new \app\admin\model\csminvite\Invcodeuser();
        $param = [
            "codestatus"=>'used',
            "registedtime"=>time(),
            "registeddate"=>date("Y-m-d"),
            "user_id"=>$dbuser->id
        ];
        $dao->where("id", "=", $row->id)->update($param);
    }
}